package com.atao.baokede.mapper;

import com.atao.baokede.pojo.Cart;
import org.apache.ibatis.annotations.*;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;

@Mapper
public interface CartMapper {

    /**
     * 根据用户ID查询购物车中的所有商品
     */
    List<Cart> findByUserId(Long userId);

    /**
     * 添加购物车条目
     */
    void insert(Cart cart);

    /**
     * 更新购物车中某条记录的商品数量
     */
    @Update("update cart set num = #{num} where id = #{cartId}")
    void updateNumByUserIdAndItemId(Long cartId, Long num);

    /**
     * 删除购物车中某条记录（根据用户ID和商品ID）
     */
    @Delete("delete from cart where id = #{cartId}")
    void deleteByCartId(Long cartId);

    /**
     * 查询购物车总数量（用于显示购物车数量）
     */
    Long getTotalItemCountByUserId(Long userId);

    /**
     * 查询购物车中商品的总金额（用于结算页面）
     */
    BigDecimal getTotalPrice(List<Long> cartIds);

    /**
     * 根据商品名称模糊查询购物车记录（可用于搜索功能）
     */
    List<Cart> searchByName(String keyword);

    /**
     * 根据购物车id集合查询购物车记录（可用于批量查询）
     */
    List<Cart> findByCartIds(@Param("ids") List<Long> ids);

    /**
     * 根据购物车id集合删除购物车记录（可用于批量删除）
     */
    void deleteByCartIds(List<Long> ids);

    /**
     * 禁用购物车中的某条记录（用于下架商品）
     */
    @Update("update cart set status = 2 where item_id = #{itemId}")
    void disableCartItem(Long itemId);

    /**
     * 禁用购物车中的多条记录（用于下架商品）
     */
    void disableCartItems(List<Long> itemIds);

    /**
     * 启用购物车中的某条记录（用于上架商品）
     */
    void enableCartItems(List<Long> itemIds);

    /**
     * 启用购物车中的某条记录（用于上架商品）
     */
    @Update("update cart set status = 1 where item_id = #{itemId}")
    void enableCartItem(Long itemId);

    /**
     * 根据商品id查询购物车中的某条记录
     */
    @Select("select * from cart where item_id = #{itemId}")
    Cart findByItemId(Long itemId);
}
